mod days;

use std::fmt::Display;

pub trait Puzzle {
    type Answer: Display;

    fn new() -> Self;

    fn solve_part1(&self) -> Self::Answer;

    fn solve_part2(&self) -> Self::Answer;

    fn solve(&self) {
        let result1 = self.solve_part1();
        let result2 = self.solve_part2();

        println!("Part 1: {result1}");
        println!("Part 2: {result2}");
    }
}

fn main() {
    days::day07::TheTreacheryOfWhales::new().solve();
}
